﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <limits.h> // 为了使用 INT_MAX 和 INT_MIN

int my_atoi(const char* str) {
    if (str == NULL) {
        return 0;
    }

    // 忽略前导空格
    while (*str == ' ') 
    {
        str++;
    }

    // 处理正负号
    int sign = 1;
    if (*str == '-' || *str == '+') 
    {
        sign = (*str == '-') ? -1 : 1;
        str++;
    }

    // 转换数字字符并累加
    int result = 0;
    while (*str >= '0' && *str <= '9') {
        int digit = *str - '0';

        // 检查溢出
        if (result > (INT_MAX / 10) || (result == (INT_MAX / 10) && digit > (INT_MAX % 10))) 
        {
            return (sign == 1) ? INT_MAX : INT_MIN;
        }

        result = result * 10 + digit;
        str++;
    }

    return result * sign;
}

int main() {
    char str1[] = "123";
    char str2[] = " -123 ";
    char str3[] = "12a34";
    char str4[] = "2147483648"; // INT_MAX + 1

     // 输出: 123
    printf("my_atoi(str2): %d\n", my_atoi(str1));
    printf("my_atoi(str1): %d\n", my_atoi(str2)); // 输出: -123
    printf("my_atoi(str3): %d\n", my_atoi(str3)); // 输出: 12
    printf("my_atoi(str4): %d\n", my_atoi(str4)); // 输出: INT_MAX

    return 0;
}


//#include <stdio.h>
//int main()
//{
//	int a =21;
//   //00000000 00000000 00000000 00000100
//	
//	return 0;
//}
//#include <stdio.h>
//#include <stdio.h>
//int check_sys()
//{
//	int i = 1;
//	return (*(char*)&i);
//}
//int main()
//{
//	int ret = check_sys();
//	if (ret == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("⼤端\n");
//	}
//	return 0;
//}


//#include <stdio.h>
//int main()
//{
//	int a = 1;
//	int ret = *((char*)&a); //拿出a的第一个字节
//	if (a == 1)
//		printf("小端");   // 01 00 00 00
//	else
//		printf("大端");   // 00 00 00 01
//	return 0;
//}




//#include <stdio.h>
//int main()
//{
//	int n = 9;
//	float* pFloat = (float*)&n;
//	printf("n的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	*pFloat = 9.0;
//	printf("num的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	return 0;
//}

